import type { RouteLocationRaw, RouteRecord, RouteRecordRaw } from "vue-router"
function loadLocalRoutes() {
  /**
     * 1. 动态获取所有的路由对象,放到数组中
     *    路由对象都在独立的文件中
     *    从文件中将所有路由对象先读取数组中
     */
  const localRoutes: RouteRecordRaw[] = []
  // 7-1.1 读取router/main所有的ts文件     /**表示所有的子目录
  const files: Record<string, any> = import.meta.glob('../router/main/**/*.ts', {
    eager: true // 立即执行给结果
  })
  // 7-1.2 将加载的对象放到localRoutes
  for (const key in files) {
    const module = files[key]
    localRoutes.push(module.default)
  }
  return localRoutes
};

export let firstMenu: any = null
export function mapMenusToRoutes(userMenus) {
  // 加载本地路由
  const localRoutes = loadLocalRoutes()
  const routes: RouteRecordRaw[] = []
  // 7-1.3 根据菜单去匹配正确的路由
  for (const menus of userMenus) {
    for (const submenu of menus.children) {
      const route = localRoutes.find(item => item.path === submenu.url)
      if (route) {
        // 1. 给route的顶层菜单增加重定向功能(但是只需要添加一次即可)
        if (!routes.find(item => item.path === menus.url)) {
          routes.push({ path: menus.url, redirect: route.path })
        }
        // 2. 给route的子菜单增加重定向功能
        routes.push(route)
      }
      // 记录第一个被匹配到的菜单
      if (!firstMenu && route) firstMenu = submenu
    }
  }
  return routes
}

/**
 * 根据路径去匹配需要显示的菜单
 * @param userMenus 所有菜单
 * @param path 需要匹配的路径
 * @returns
 */
export function mapPathToMenu(path: string, userMenus: any[]) {
  for (const menu of userMenus) {
    for (const submenu of menu.children) {
      if (submenu.url === path) {
        return submenu
      }
    }
  }
}

// 面包屑方法
export function mapPathToBreadcrumbs(path: string, userMenus: any[]) {
  const breadcrumbs: any[] = []
  for (const menu of userMenus) {
    for (const submenu of menu.children) {
      if (submenu.url === path) {
        // 1. 顶层菜单
        breadcrumbs.push({ name: menu.name, path: menu.url })
        // 2. 匹配菜单
        breadcrumbs.push({ name: submenu.name, path: submenu.url })
        return breadcrumbs
      }
    }
  }
  return breadcrumbs
}
